package fr.upmc.mdoc.tp1.domain;

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;

import fr.upmc.mdoc.tp1.models.Contact;
import fr.upmc.mdoc.tp1.models.Entreprise;
import fr.upmc.mdoc.tp1.tools.HibernateUtil;

/**
 * La classe <code>DAOContact</code> s'occupe de faire le lien
 * entre les classes modèles et la base de donnée.
 * @author Ali BOINA-MASSIMIA & Alexandre HEBERT
 *
 */
public class DAOContact {

	private static final Connection connexion = DBConnector.createConnection();
	private Session session = null;
	private Transaction tx = null;

	
	public DAOContact() {

		session = HibernateUtil.getSessionFactory().openSession();

	}

	/**
	 * Ajout d'un contact dans la base de donnée
	 * 
	 * @param c
	 *            le contact qu'on veut ajouter dans la base de donnée
	 * @return true si le contact est bien rajouté dans la base de donnée et
	 *         false sinon
	 */
	public boolean addContact(Contact c) {
		
		tx = session.beginTransaction();

		session.persist(c);

		// session.save(c);

		tx.commit();

		System.out.println("Le contact  : {" + c + "}");

		return true;

	}

	@Override
	protected void finalize() throws Throwable {
		// fermeture de la session
		session.close();
	}

	public boolean addContact(Entreprise entrp) {

		tx = session.beginTransaction();

		session.persist(entrp);

		tx.commit();

		return true;
	}

	@SuppressWarnings("unchecked")
	public List<Contact> getContacts() {
		System.out.println("Retourne la liste des contacts");

		// Récupération des contacts depuis la base de donnée
		List<Contact> contacts = (List<Contact>) session.createQuery(
				"from Contact").list();		

		return contacts;

	}

	public Contact getContact(long idContact) {
		System.out.println("Retourne la liste des contacts à partir de l'id");

		// Récupération des contacts depuis la base de donnée
		Contact contact = (Contact) session.createQuery(
				"from Contact c where c.contactId='" + idContact + "'")
				.uniqueResult();

		return contact;

	}

	public void editContat(long idContcat) {

		System.out.println("Edition du contact: { " + idContcat + "  }");

	}

	public void deleteContact(long contactId) {
		System.out.println("Suppression du contact : [" + contactId + " ]");
		Statement s = null;
		try {
			s = connexion.createStatement();
			if (s.execute("DELETE FROM contact WHERE ID_CONTACT = " + contactId))
				System.out.println("Je suis supprimé : {" + contactId + "}");
			s.close();
		} catch (SQLException e) {
			e.printStackTrace();
			System.out.println("Je ne suis pas supprimé : {" + contactId + "}");
		}
	}

}
